#!/bin/bash
#背景：在新版vmware中，网络适配器在设置为NAT模式下，宿主机网络中断（如拔插网线、wifi网络切换等），往往会导致虚拟机的网卡IP丢失，从而导致虚机业务异常，每次通过重启虚拟机网卡来重新获取IP，这种频繁的操作让人沮丧。基于此，写了一个shell脚本，来实现虚拟机网卡异常时，自动重启该网卡，来实现网络的稳定。
#这是一个通过shell脚本实现的网卡稳定器，实现了systemclt管理，并且加入了systemd内置的定时器用来定时执行脚本

dir=`pwd`

#定义外部输入参数
if [ "$1" == "-h" ];then
   echo '脚本使用方法有两种：'
   echo '1、交互式：直接执行./install.sh->然后输入需要配置的网卡名称'
   echo '2、非交互式：./install.sh [网卡名称1] [网卡名称2]'
   exit 0
else
   if [[ -z "$@" ]];then
      read -p "请输入你想要管理的网卡名称(多个用空格隔开):" eth
   else
      eth=("$@") 
   fi
fi

#检查服务器是否存在该网卡
i=0
for A in ${eth[*]};do
    a=`ip addr show $A`
    if [[ -z "${a[@]}" ]];then
       ethd[$i]=$A
       let i++
    fi
done
if [ $i -gt 0 ];then
       echo -e "本服务器找不到该网卡：\033[31m${ethd[*]}\033[0m"
       echo "请再次确认输入的网卡是否正确!!!"
       exit 1
fi

#创建重启网卡脚本
echo '#!/bin/bash' > ${dir}/rseth.sh
echo "eth=("${eth[@]}")" >> ${dir}/rseth.sh
echo 'for A in ${eth[@]};do' >> ${dir}/rseth.sh
echo '    a=`ip addr show $A | grep inet|wc -l`' >> ${dir}/rseth.sh
echo '    if [ $a == 0 ];then' >> ${dir}/rseth.sh
echo '       ifdown $A' >> ${dir}/rseth.sh
echo '       ifup $A' >> ${dir}/rseth.sh
echo '    fi' >> ${dir}/rseth.sh
echo 'done' >> ${dir}/rseth.sh
chmod +x ${dir}/rseth.sh
ln -fs ${dir}/rseth.sh /usr/bin/rseth

#创建rseth.service服务
echo '[Unit]' > /etc/systemd/system/rseth.service
echo 'Description=Run a Custom Script at Startup' >> /etc/systemd/system/rseth.service
echo 'After=network.target' >> /etc/systemd/system/rseth.service
echo '' >> /etc/systemd/system/rseth.service
echo '[Service]' >> /etc/systemd/system/rseth.service
echo 'Type=simple' >> /etc/systemd/system/rseth.service
echo "ExecStart=/usr/bin/rseth" >> /etc/systemd/system/rseth.service
echo '' >> /etc/systemd/system/rseth.service
echo '[Install]' >> /etc/systemd/system/rseth.service
echo 'WantedBy=multi-user.target' >> /etc/systemd/system/rseth.service
chmod +x /etc/systemd/system/rseth.service
systemctl daemon-reload  &&  systemctl enable rseth.service
systemctl start rseth.service

#创建rseth.timer定时器
echo '[Unit]' > /etc/systemd/system/rseth.timer
echo 'Description=Run a Timer' >> /etc/systemd/system/rseth.timer
echo '' >> /etc/systemd/system/rseth.timer
echo '[Timer]' >> /etc/systemd/system/rseth.timer
echo 'OnUnitActiveSec=10s' >> /etc/systemd/system/rseth.timer
echo 'Unit=rseth.service' >> /etc/systemd/system/rseth.timer
echo '' >> /etc/systemd/system/rseth.timer
echo '[Install]' >> /etc/systemd/system/rseth.timer
echo 'WantedBy=timers.target' >> /etc/systemd/system/rseth.timer
chmod +x /etc/systemd/system/rseth.timer
systemctl daemon-reload  &&  systemctl enable rseth.timer
systemctl start rseth.timer
